<?php

namespace App\Containers\AppSection\Data\Models;

use App\Containers\AppSection\File\Models\File;
use App\Containers\AppSection\User\Models\User;
use App\Ship\Parents\Models\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * Паспортные данные
 *
 * @property int $id Id
 * @property int $user_id Владелец
 * @property string $serial_number Серия и номер паспорта
 * @property string $issue_date Дата выдачи
 * @property string $department_code Код подразделения
 * @property string $issued_by Кем выдан
 * @property string $first_photo_id Первая страница
 * @property string $second_photo_id Страница последней прописки
 * @property Carbon $created_at Время создания
 * @property Carbon $updated_at Время обновления
 *
 * @property User $user Владелец
 * @property File $first_photo Первая страница
 * @property File $second_photo Страница последней прописки
 */
class Passport extends Model
{
    protected $fillable = [
        'user_id',
        'serial_number',
        'issue_date',
        'department_code',
        'issued_by',
        'first_photo_id',
        'second_photo_id',
    ];

    protected $table = 'passport_data';

    protected $casts = [
        'issue_date' => 'date',
        'files' => 'json',
    ];

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'Passport';


    /**
     * Первая страница
     * @return BelongsTo File
     */
    public function first_photo(): BelongsTo
    {
        return $this->belongsTo(File::class, 'first_photo_id', 'id');
    }

    /**
     * Страница последней прописки
     * @return BelongsTo File
     */
    public function second_photo(): BelongsTo
    {
        return $this->belongsTo(File::class, 'second_photo_id', 'id');
    }

    /**
     * Владелец
     * @return BelongsTo User
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id', 'id')->withTrashed();
    }
}
